#ifndef LOCKFILE_H_
#define LOCKFILE_H_

#include <unistd.h>
#include <fcntl.h>
#include <string>

typedef enum {
	write_lock,
	read_lock
} lock_t;

class LockFile {

private:

	struct flock fl;
	int fd;
	std::string fileName;

public:

	/*
	 * name: del archivo a lockear
	 * overwrite: setear en true para truncar el archivo si existe
	 * 				  setear en false para mantener el contenido actual del archivo
	 */
	LockFile ( const char* name, bool overwrite = false );
	virtual ~LockFile();

	int lock (lock_t tipo);
	int unlock ();

	int append ( const char* buffer, int buffsize );
	int read ( char* buffer, int buffsize );
	int write (const char* buffer, int buffsize);
	size_t seek( size_t pos);
	size_t size();

	bool isOpen();
	void open(bool overwrite = false);
	void close();

	int getFileDescriptor();


};

#endif /* LOCKFILE_H_ */
